package main

import (
	//"YunWei/sh"
	"encoding/csv"
	"fmt"
	"log"
	"os"
)

func main2() {
	//sh.Command("echo", "hello").Run()
	/*
	   daemon := flag.Bool("daemon", false, "run in daemon and forever")
	   flag.Parse()
	   //判断是否以守护进程的方式启动
	   if *daemon {
	       runByDaemon(os.Args) //执行daemon，由其启动主程序
	   } else {
	       runBusiness(os.Args) //执行business
	   }*/
}

//go语言读写csv文件

func main() {
	if len(os.Args) < 3 {
		return
	}
	//创建一个io对象
	filename := os.Args[1]
	ReadCsv(filename)
	//WriterCSV(filename)

}

// csv文件读取
func ReadCsv(filepath string) {
	//打开文件(只读模式)，创建io.read接口实例
	opencast, err := os.Open(filepath)
	if err != nil {
		log.Println("csv文件打开失败！")
	}
	defer opencast.Close()

	//创建csv读取接口实例
	ReadCsv := csv.NewReader(opencast)

	//获取一行内容，一般为第一行内容
	read, _ := ReadCsv.Read() //返回切片类型：[chen  hai wei]
	log.Println(read)

	//读取所有内容
	lines, err := ReadCsv.ReadAll() //返回切片类型：[[s s ds] [a a a]]

	file, err := os.OpenFile(fmt.Sprintf("dict_%s.js", os.Args[2]), os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer func(file *os.File) {
		_ = file.Close()
	}(file)

	_, err = file.WriteString(fmt.Sprintf("const dict_%s = {\n", os.Args[2]))
	for _, v := range lines {
		log.Println(v)

		info := fmt.Sprintf(`    "%s":["%s", "%s", "%s", "%s", "%s"],`, v[0], v[1], v[2], v[3], v[4], v[5])
		log.Println(info)
		_, err := file.WriteString(info)
		_, err = file.WriteString("\n")
		if err != nil {
			return
		}
	}
	// log.Println(ReadAll)
	_, err = file.WriteString("};\n")

	/*
	   说明：
	    1、读取csv文件返回的内容为切片类型，可以通过遍历的方式使用或Slicer[0]方式获取具体的值。
	    2、同一个函数或线程内，两次调用Read()方法时，第二次调用时得到的值为每二行数据，依此类推。
	    3、大文件时使用逐行读取，小文件直接读取所有然后遍历，两者应用场景不一样，需要注意。
	*/

}
